package com.warom.sdg.dao;

import com.warom.sdg.dto.PageRequestDto;
import com.warom.sdg.dto.PageResponseDto;
import com.warom.sdg.model.AlarmRecordEntity;

import java.util.List;

/**
 * 报警记录数据访问接口
 */
public interface AlarmRecordDao {
    
    /**
     * 添加报警记录
     * @param alarmRecord 报警记录实体
     * @return 新增记录的ID
     */
    long insertAlarmRecord(AlarmRecordEntity alarmRecord);
    
    /**
     * 更新报警记录
     * @param alarmRecord 报警记录实体
     * @return 更新的行数
     */
    int updateAlarmRecord(AlarmRecordEntity alarmRecord);
    
    /**
     * 更新报警状态
     * @param id 报警记录ID
     * @param status 新状态
     * @param handleUser 处理用户
     * @param handleDescription 处理描述
     * @return 更新的行数
     */
    int updateAlarmStatus(long id, String status, String handleUser, String handleDescription);
    
    /**
     * 根据ID获取报警记录
     * @param id 报警记录ID
     * @return 报警记录实体
     */
    AlarmRecordEntity getAlarmRecordById(long id);
    
    /**
     * 获取所有报警记录
     * @return 报警记录列表
     */
    List<AlarmRecordEntity> getAllAlarmRecords();
    
    /**
     * 分页获取报警记录
     * @param pageRequest 分页请求参数
     * @return 分页响应数据
     */
    PageResponseDto<AlarmRecordEntity> getAlarmRecordsByPage(PageRequestDto pageRequest);
    
    /**
     * 根据报警类型分页获取报警记录
     * @param alarmType 报警类型
     * @param pageRequest 分页请求参数
     * @return 分页响应数据
     */
    PageResponseDto<AlarmRecordEntity> getAlarmRecordsByType(String alarmType, PageRequestDto pageRequest);
    
    /**
     * 根据多条件查询报警记录
     * @param alarmType 报警类型
     * @param paramType 参数类型
     * @param level 报警级别
     * @param status 报警状态
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param pageRequest 分页请求参数
     * @return 分页响应数据
     */
    PageResponseDto<AlarmRecordEntity> queryAlarmRecords(String alarmType, String paramType, 
                                                       String level, String status, 
                                                       long startTime, long endTime, 
                                                       PageRequestDto pageRequest);
    
    /**
     * 删除报警记录
     * @param id 报警记录ID
     * @return 删除的行数
     */
    int deleteAlarmRecord(long id);
    
    /**
     * 删除指定时间之前的报警记录
     * @param timestamp 时间戳
     * @return 删除的行数
     */
    int deleteAlarmRecordsBefore(long timestamp);
    
    /**
     * 统计各级别报警数量
     * @param alarmType 报警类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 各级别报警数量
     */
    int[] countAlarmsByLevel(String alarmType, long startTime, long endTime);
    
    /**
     * 统计各状态报警数量
     * @param alarmType 报警类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 各状态报警数量
     */
    int[] countAlarmsByStatus(String alarmType, long startTime, long endTime);
} 